import * as Cesium from "cesium";

export default class Particle {
  constructor(viewer) {
    // 创建box entity 用于固定粒子系统发射
    this.boxEntity = viewer.entities.add({
      name: "box",
      position: new Cesium.Cartesian3.fromDegrees(113.3191, 23.109, 250),
      box: {
        // dimensions 指定框的长度和宽高
        dimensions: new Cesium.Cartesian3(100, 100, 1000),
        material: Cesium.Color.RED.withAlpha(0.5),
      },
    });
    // 使用Cesium自带的粒子系统
    this.particleSystem = new Cesium.ParticleSystem({
      // 粒子纹理
      image: "/texture/smoke.png",
      // 粒子图像大小
      imageSize: new Cesium.Cartesian2(20, 20),
      // 开始时粒子的大小
      startScale: 0.1,
      // 结束时粒子的大小
      endScale: 4.0,
      // 速度 米/秒
      speed: 5.0,
      // 发射器：BoxEmitter （立方体发射器，粒子随机定位在盒子内，从而盒子中心发射）
      // CircleEmitter (圆形发射器,被定位在一个圆圈内，并具有沿 z 向量的初始速度)
      // ConeEmitter (锥形发射器，粒子将位于锥体的尖端，并具有朝向底部的初始速度)
      // SphereEmitter(球体发射器,粒子将随机定位在球体内，并具有从球体中心发出的初始速度)
      emitter: new Cesium.CircleEmitter(1000),
      // emissionRate 发射率，每秒发射的粒子数量
      emissionRate: 20,
      // 粒子生命周期 秒为单位
      lifetime: 10,
      // 粒子发射的位置，modelMatrix 将粒子系统从模型转换到世界坐标4x4矩阵
      modelMatrix: this.boxEntity.computeModelMatrix(
        viewer.clock.currentTime, // 指定时间计算实体变换的模型矩阵
        new Cesium.Matrix4()
      ),
    });
    viewer.scene.primitives.add(this.particleSystem);
  }
}
